import { Login } from '@/api/login'
import router from '@/router'
import Storage from '@/utils/Storage'
import { setTokenTimeout } from '@/utils/Auth'

export default {
  // 开启命名空间, 会根据文件路径来进行动态加上
  namespaced: true,
  // 模块内容（module assets）
  state: () => ({
    token: Storage.getLocal('token') || '',
    sideType: false, // 汉堡伸缩框
    lang: Storage.getLocal('lang') || 'zh', // 当前使用的语言(功能禁用了, 没用到)
    urlPath: Storage.getLocal('urlPath') || '/', // 记录当前路由的位置
    userInfo: Storage.getSession('userInfo') || {}, // 用户信息
    avatar: '', // 用户的头像地址
    menus: Storage.getSession('menus') || [] // 菜单
  }), // 模块内的状态已经是嵌套的了，使用 `namespaced` 属性不会对其产生影响
  mutations: {
    // login () { ... } // -> commit('app/login')
    setToken (state, token) {
      state.token = token
      Storage.setLocal('token', token)
    },
    setSideType (state) {
      state.sideType = !state.sideType
    },
    setLanguage (state, lang) {
      state.lang = lang
      Storage.setLocal('lang', lang)
    },
    setUrlPath (state, urlPath) {
      state.urlPath = urlPath
      Storage.setLocal('urlPath', urlPath)
    },
    setUserInfo (state, userInfo) {
      state.userInfo = userInfo
      Storage.setSession('userInfo', userInfo)
    },
    setMenus (state, menus) {
      state.menus = menus
      Storage.setSession('menus', menus)
    }
  },
  getters: {
    // isAdmin () { ... } // -> getters['app/isAdmin']
  },
  actions: {
    // login () { ... } // -> dispatch('app/login')
    login ({ commit }, userForm) {
      return new Promise((resolve, reject) => {
        Login(userForm)
          .then(result => {
            commit('setToken', result.token)
            // 设置token过期时间
            setTokenTimeout()
            router.replace('/')
            resolve()
          })
          .catch(err => {
            reject(err)
          })
      })
    },
    logout ({ commit }) {
      // 做好一系列的清理工作
      commit('setToken', '')
      commit('setUrlPath', '/')
      commit('setMenus', [])
      commit('setUserInfo', {})
      Storage.clearLocal()
      Storage.clearSession()
      router.replace('/login')
    }
  }
}
